// 文件名：vite.config.ts
// 作者：系统管理员
// 创建日期：2025-04-26
// 描述：Vite配置文件，用于配置开发服务器和构建选项

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'
import path from 'path'
import { fileURLToPath, URL } from 'node:url'

// https://vitejs.dev/config/
export default defineConfig({
  root: path.resolve(__dirname, './'),
  plugins: [vue(), vueJsx(), vueDevTools()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      '@views': path.resolve(__dirname, './src/views')
    }
  },
  // 添加base路径配置
  base: '/', // 根路径配置
  // 优化构建配置
  build: {
    outDir: 'dist',
    assetsDir: 'static',
    rollupOptions: {
      output: {
        chunkFileNames: 'static/js/[name]-[hash].js',
        entryFileNames: 'static/js/[name]-[hash].js',
        assetFileNames: 'static/[ext]/[name]-[hash].[ext]'
      }
    }
  },
  server: {
    port: 5173, // 开发服务器端口
    host: '0.0.0.0', // 允许局域网访问
    open: true, // 自动打开浏览器
    // 服务器日志配置
    logLevel: 'info', // 日志级别: silent | error | warn | info | debug
    clearScreen: false, // 保留日志屏幕输出
    // 自定义日志输出
    logger: {
      info(msg: string) {
        console.log(`[INFO] ${msg}`)
      },
      warn(msg: string) {
        console.warn(`[WARN] ${msg}`)
      },
      error(msg: string) {
        console.error(`[ERROR] ${msg}`)
      }
    },
    // 代理配置
    proxy: {
      '/api': {
        target: 'http://localhost:8000',
        changeOrigin: true,
        secure: false,
        // 记录代理请求日志
        logLevel: 'debug',
        // 日志文件输出路径
        logProvider: () => {
          const fs = require('fs')
          const path = require('path')
          const logFile = path.join(__dirname, 'logs', 'proxy.log')
          
          // 确保logs目录存在
          if (!fs.existsSync(path.dirname(logFile))) {
            fs.mkdirSync(path.dirname(logFile))
          }
          
          return {
            write(msg: string) {
              fs.appendFileSync(logFile, msg + '\n')
            }
          }
        }
      }
    }
  }
})
